<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    //静态方法 Promise.race([p1,p2,p3]);
    // 执行多个promise对象，获取执行最快的promise结果,
    // 1）不影响后续的其他promise的执行，就是所有的promise还是会执行，但是race函数获取最快执行的结果。
    // 2）最快执行完的是成功的就是成功的状态的promise,最快执行完的是失败的就是失败的promie
    
    let p1= new Promise((resolve,reject)=>{
        setTimeout(() => {
            
            reject('111')
            console.log('111','log');
        }, 1000);
    })
    let p2= new Promise((resolve,reject)=>{
        setTimeout(() => {
            resolve('2222')
            console.log('222','log');
        }, 2000);
    })
    let p3= new Promise((resolve,reject)=>{
        setTimeout(() => {
            resolve('333')
            console.log('333','log');
        }, 3000);
    })
    p3.then(res=>{
        console.log(res,'p3-then');
    })

    // let pr=  Promise.race([p1,p2,p3]);
    // console.log(pr,'pr');
    // pr.then(res=>{
    //     console.log(res,"res-race-then");
    // },err=>{
    //     console.log(err,"err-race-then");
    // })

    //Promise.race()方法的实现
    class MyPromise{
        static race(arr){
            return new Promise((resolve,rejected)=>{
                 arr.forEach(item => { //item就是每个传进来的item,
                    item.then(res=>{ //then会调用三次，谁执行得快就先调用谁，
                                    // 直接通过resolve或者rejected返还给新的promise对象的外部then的调用方法里
                        resolve(res)
                    },err=>{
                        rejected(err)
                    })
                });
            })
        }
    }
    let pmr = MyPromise.race([p1,p2,p3])
    console.log(pmr,'my-race');
    </script>
   
</body>
</html>